/**
 * @箭头函数
 *  */
let obj1 = {
    func: () => {
        console.log("func()=> this ", this)
    },
    a: "hi",
    fn: function () {
        console.log("fn this ", this)
    },
    e: {
        p: ()=>{
            setTimeout(()=>{
                console.log("p ", this)
            })
        }   
    }
}
function f() {
    obj1.func()
    let a = () => {
        console.log("f this ", this)
    }
    a()
}
obj1.func()
obj1.fn()
console.log("------")
f()
console.log("=====")
let b = {
    c: f
}
b.c()
console.log("---------")
obj1.e.p()

function obj(){
    this.a = 111
}
obj.prototype.fn = function(){
    let a = ()=>{
        console.log(this)
    }
    a()
}
let q = new obj()
q.fn()
/**
 * @const_let
 * @模板字面量
 * @解构
 * [x,y,z] = [1,2,3]
 * [x,y] = [y,x]
 * @对象字面量
 * 使用和所分配的变量名称相同的名称初始化对象时
 * @for_of
 * 只循环访问对象中的值
 * @for_in
 * 访问所有可枚举属性，原型中添加其他任何属性也会出现在循环中
 * @展开运算符
 * function(...args)
 * copy数组，对象 ？？？深拷贝
 * @箭头函数
 * 1. setTimeout
 * 2. dom.onclick
 * 3. new
 * 4. 原型链上
 * @默认参数
 * function(name="xiaoming")
 * @类class
 * A.prototype 
 * class B entends A
 * super 对象、函数
 * 
 * 
 * 
 *  */